package com.asa.control_theory;

public class G {

	/**
	 * 	状态观测器设计
	 * 	
	 * 	
	 * 	控制器的设计
	 * 		X` = A*X + B*u
	 * 		令 u = -k*X		X可测的
	 * 
	 * 	观测器（Observer）：根据系统的输入，和输出来估计系统的状态
	 * 	
	 * 	例：
	 * 		X` = A*X + B*u	①
	 * 		Y = C*X + D*u  	②
	 * 		通过系统的输入u，和系统的输出Y来计算系统的状态X	
	 * 		
	 * 		设X`为估计值，Y`为估计的输出				这里让我迷惑的是X`和X^的区别是什么，什么是X^
	 * 			X^` = A*X^ + B*u + L*(Y - Y^)	③
	 * 			Y^ = C*X^ + D*u 	④
	 * 			我们要通过确定矩阵L
	 * 		
	 * 		
	 * 		代④到③	X^` = A*X + B*u + L*(Y - C*X^ + D*u)
	 * 				X^` = (A - L*C)*X^ + (B-L*D)*u + L*Y 		⑤	观测器
	 * 
	 * 		① - ⑤	X` - X^` = A*X + B*u - (A - L*C)*X^ - (B-L*D)*u - L*Y
	 * 		代入②	X` - X^` = A*X + B*u - (A - L*C)*X^ - (B-L*D)*u - L*C*X - L*D*u
	 * 						 = (A-L*C)*X - (A - L*C)*X^ =  (A-L*C)*(X - X^)
	 * 		令 ：X - X^ = ex					ex--error误差，是估计值与实际值的误差
	 * 		我们希望ex趋近于0	===> A-L*C的特征值<0
	 * 			ex` = (A-L*C)*ex
	 * 		
	 * 		建立一个新的反馈系统使得	X - X^ = ex	-->0
	 * 		
	 * 		例子：
	 * 			一个弹簧系统如图：control_theory-G01.png
	 * 			
	 * 			Z1 = X	位置	可测
	 * 			Z2 = X`	速度	不可测
	 * 			y = Z1	位置	可测
	 * 			
	 * 			那么如果我们需要设计一个观测器来观测速度
	 * 
	 * 			{{Z1`},
	 * 			{Z2`}
	 * 			}	=  {
	 * 					{0,1}
	 * 					{-k/m,-B/m}
	 * 					} * {
	 * 						{Z1},
	 * 						{Z2}
	 * 					} + {
	 * 						{0},
	 * 						{1/m}
	 * 						} * u
	 * 
	 * 			y = {1,0} *{
	 * 						{Z1},
	 * 						{Z2}
	 * 					} + 0
	 * 				
	 * 			标准的 ABCD 四个矩阵
	 * 
	 * 			令L = {
	 * 						{L1},
	 * 						{L2}
	 * 					}
	 * 
	 * 			A - L*C  = {
	 * 					{0,1}
	 * 					{-1,-1/2}
	 * 					} - 
	 * 					{
	 * 						{L1},
	 * 						{L2}
	 * 					} * {1,0} 
	 * 				= {
	 * 					{-L1,1}
	 * 					{-1 - L2,-1/2}
	 * 					}
	 * 			求（A - L*C）的特征值
	 * 			|λ*I - (A - L*C)| = 0
	 * 
	 * 			λ*λ + (L1 - 1/2) *λ + 1 + 1/2 *L1 + L2 = 0
	 * 			设 取λ1 = λ2 = -1
	 * 			则有			
	 * 			L1 - 1/2 = 2
	 * 			1 + 1/2 *L1 + L2 = 1
	 * 			==》
	 * 			L1 = 2.5
	 * 			L2 = -1.25
	 * 
	 * 
	 * 			Z^` = (A - L*C)*Z^ + (B-L*D)*u + L*y
	 * 
	 * 			Z^` = {{-2.5,1}
	 * 					,{0.25,-1/2}} * Z^
	 * 					+
	 * 					{{0},
	 * 					{1}
	 * 					} * u
	 * 					+
	 * 					{{2.5},
	 * 					{-1.25}
	 * 					} * y		观测器
	 * 			
	 * 			
	 * 
	 * 		
	 * 
	 * 					
	 * 
	 * 
	 * 
	 * 
	 * 
	 * 
	 */
	
	
	
	/**
	 * 
	 * 观测器		observer
	 * x` = A*x + B*u
	 * y = C*x
	 * 
	 * 
	 * 当x不可测的时候，设x^为估计值
	 * 令 x^` = A * x^ + B*u + L*(y - y^)   		①
	 *   y^ = C*x + D*u							②
	 * ex = x - x^		③这个是观测结果和实际值的误差
	 * ①②③进行一个合并
	 * 	ex` = (A-L*C)*ex
	 * 	期望ex趋近于0		==》	Re[Eig(A-LC)]<0				eig是指特征值的意思
	 * 
	 * 
	 * 是否所有系统都可以观测？
	 * 定义：如果一个系统可观测：	O = {
	 * 							{C},
	 * 							{C*A},				
	 * 							{C*A*A},
	 * 							.
	 * 							.
	 * 							.
	 * 							{C*Math.pow(A,n-1)},		
	 * 						}
	 * 
	 * 			Rank(O) = n		这个时候就是可观测的
	 * 
	 * 
	 * 例：
	 * 		x` = {{0,1},
	 * 				{2,-1}} * x
	 * 			+	{{0},
	 * 				{1}} * u
	 * 		y = {-1,1}*x
	 * 
	 * 		O = {{-1,1},
	 * 				{2,-2}}	
	 * 		Rank(O) = 1 < n=2		====>不可观测！
	 * 
	 * 
	 * 系统：可控+可观测
	 * 		x不可观测
	 * STEP1：观测器 x^
	 * 			X^` = A*X^ + B*u + L*(Y - Y^)	③
	 * 			Y^ = C*X^ + D*u 	④	
	 * 			ex` = (A-L*C)*ex 			⑤	
	 * 
	 * STEP2：控制器
	 * 			u = -k*x^				这个是和之前的控制器有区别的，之前的是设u = -k*x
	 * 			x` = A*x - B*k*x^		由ex = x - x^可知x^=x-ex
	 * 			==》x` = A*x - B*k*(x-ex) = (A-B*k)*x +B*k*ex		⑥
	 * 		⑤和⑥归并
	 * 			{{ex`},
	 * 				{x`}} = {{A-L*C,0},
	 * 						{B*k,A-B*k}}*
	 * 						{{ex},
	 * 						{x}}
	 * 			要使得ex趋近于0
	 * 		为了方便，我们将{{A-L*C,0},
	 * 		{B*k,A-B*k}}矩阵称之为M矩阵
	 * 		M是一个下三角矩阵
	 * 		那么M的特征值就是(A-L*C)和(A-B*k)的特征值
	 * 
	 * 		(λ*I-(A-L*C))*(λ*I-(A-B*k)) = 0		它们的特征值的实部都是小于0的
	 * 
	 * 
	 * 		(λ*I-(A-L*C))	观测器
	 * 		(λ*I-(A-B*k))	控制器
	 * 		我们还希望观测器的收敛速度要大于控制器的
	 * 		这样就能通过准确的值来指导我们的系统输入
	 * 
	 * 
	 * 
	 * 
	 */
	
	
	
	
	
	
	
	/**
	 * 总结：
	 * 	
	 * 	x` = A*x + B*u
	 * 	y = C*x + D*u
	 * 
	 * x`成为系统的状态变量
	 * u是系统的输入
	 * y是系统的输出
	 * 
	 * 拉氏变换
	 * 	S*Xs = A*Xs + B*Us ==>	(S*I - A)*Xs = B*Us		==>	 Xs = (S*I - A)^(-1) * B*Us
	 * 	Ys = C*Xs + D*Us	==> Ys =(C*(S*I - A)^(-1)* B + D) *Us
	 * 	
	 * 那么传递函数：
	 * 	Gs = Ys/Us = (C*(S*I - A)^(-1) * B + D) 
	 * 
	 * 
	 * 开系统（没有输入）：
	 * 	x` = A*x
	 * 	A的特征值λ，根据特征值,来判断系统的稳定性
	 * 	x1 = C11*Math.exp(λ1*t) + C12*Math.exp(λ2*t) ...
	 * 	x2 = C21*Math.exp(λ1*t) + C22*Math.exp(λ2*t) ...
	 * 	...
	 * 
	 * 			A的特征值	λ = a + b*i			对于所有的a
	 * 			所有a <= 0时		是稳定的
	 * 			所有a < 0时		是渐进的
	 * 			存在a > 0时		是不稳定的
	 * 
	 * 闭系统（有输入）：
	 * 	X` = A*X + B*u		u=-k*X
	 * 	===》	X` = A*X - B*k*X =  (A - B*k)*X 
	 * 	(A - B*k) ~ Au
	 * 
	 * 
	 * 观测器
	 * 	x - x^ = e
	 * 
	 * 	x^` = A * x^ + B*u + L*(y - y^)   		①
	 *  y^ = C*x + D*u							②
	 * 
	 * 	ex` = (A-L*C)*ex		(A-L*C)我们只需要这部分小于0
	 * 	
	 * 我们再根据观测器来实现控制器：
	 * x` = (A-B*k)*x^
	 * 
	 * 特征值，刚好是系统的极点
	 * 
	 * 
	 */
	
	
	
	
	
	
	
	
	
	
	
	
	
}
